package view;
import javax.swing.*;
import model.Server;
import model.Task;
import model.TaskGenerator;
import java.awt.*;
import java.awt.event.*;
public class Gui extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private static final String INVALID_FIELDS = "Invalid fields.Please enter again more carefully.";
private static final String ERROR = "ERROR";
private JTextField minimumArrival, maximumArrival, minimumService, maximumService, numberQueues,
numberOfTasksPerQueue, simulationInterval,queueToClose,timeToClose;
private JPanel south, arrivalPanel, servicePanel, queuesPanel, simulationPanel, simulation;
private JButton startButton;
private int minArrival, maxArrival, minService, maxService, nrQueues, nrOfTasksPerQueue, simInterval,queueClose,timeClose;
private TaskGenerator taskGenerator;
public Gui() {
this.setTitle("Simulation");
this.setLayout(new BorderLayout());
initializeSouth();
simulation = new JPanel();
simulation.setLayout(new FlowLayout());
this.add(simulation, BorderLayout.CENTER);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void displayAction(Server[] servers) {
simulation.removeAll();
simulation.revalidate();
int serversSize = servers.length;
for (int i = 0; i < serversSize; i++) {
JList<Task> jTasks = new JList<Task>(servers[i].getTasks());
simulation.add(jTasks);
simulation.repaint();
simulation.revalidate();
}
}
private void initializeSouth() {
south = new JPanel();
south.setLayout(new BoxLayout(south, BoxLayout.Y_AXIS));
arrivalPanel = new JPanel();
minimumArrival = new JTextField("Minimum Arrival Time");
/*
* minimumArrival.addFocusListener(new FocusListener() {
*
* @Override public void focusGained(FocusEvent e) {
* minimumArrival.setText(""); }
*
* @Override public void focusLost(FocusEvent e) { } });
*/
maximumArrival = new JTextField("Maximum Arrival Time");
/*
* maximumArrival.addFocusListener(new FocusListener() {
*
* @Override public void focusGained(FocusEvent e) {
* maximumArrival.setText(""); }
*
* @Override public void focusLost(FocusEvent e) { } });
*/
arrivalPanel.add(minimumArrival);
arrivalPanel.add(maximumArrival);
servicePanel = new JPanel();
minimumService = new JTextField("Minimum Time Of Service");
/*
* minimumService.addFocusListener(new FocusListener() {
*
* @Override public void focusGained(FocusEvent e) {
* minimumService.setText(""); }
*
* @Override public void focusLost(FocusEvent e) { } });
*/
maximumService = new JTextField("Maximum Time Of Service");
/*
* maximumService.addFocusListener(new FocusListener() {
*
* @Override public void focusGained(FocusEvent e) {
* maximumService.setText(""); }
*
* @Override public void focusLost(FocusEvent e) { } });
*/
servicePanel.add(minimumService);
servicePanel.add(maximumService);
queuesPanel = new JPanel();
numberQueues = new JTextField("Number Of Queues");
numberOfTasksPerQueue = new JTextField("Number of tasks per queue");
/*
* nrQueues.addFocusListener(new FocusListener() {
*
* @Override public void focusGained(FocusEvent e) {
* nrQueues.setText(""); }
*
* @Override public void focusLost(FocusEvent e) { } });
*/
queuesPanel.add(numberQueues);
queuesPanel.add(numberOfTasksPerQueue);
simulationPanel = new JPanel();
simulationInterval = new JTextField("Simulation time");
queueToClose=new JTextField("Queue to close");
timeToClose=new JTextField("Time to close");
/*
* simulationInterval.addFocusListener(new FocusListener() {
*
* @Override public void focusGained(FocusEvent e) {
* simulationInterval.setText(""); }
*
* @Override public void focusLost(FocusEvent e) { } });
*/
startButton = new JButton("Start simulation");
startButton.addActionListener(this);
simulationPanel.add(simulationInterval);
simulationPanel.add(queueToClose);
simulationPanel.add(timeToClose);
south.add(arrivalPanel);
south.add(servicePanel);
south.add(queuesPanel);
south.add(simulationPanel);
south.add(startButton);
this.add(south, BorderLayout.SOUTH);
}
private boolean checkFields() {
try {
minArrival = Integer.valueOf(minimumArrival.getText());
maxArrival = Integer.valueOf(maximumArrival.getText());
minService = Integer.valueOf(minimumService.getText());
maxService = Integer.valueOf(maximumService.getText());
nrQueues = Integer.valueOf(numberQueues.getText());
nrOfTasksPerQueue = Integer.valueOf(numberOfTasksPerQueue.getText());
simInterval = Integer.valueOf(simulationInterval.getText());
queueClose=Integer.valueOf(queueToClose.getText());
timeClose=Integer.valueOf(timeToClose.getText());
} catch (NumberFormatException e) {
return false;
}
return true;
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == startButton) {
if (checkFields()) {
taskGenerator = new TaskGenerator(this, minArrival, maxArrival, minService, maxService, simInterval,
nrQueues, nrOfTasksPerQueue,queueClose,timeClose);
new Thread(taskGenerator).start();
} else {
JOptionPane.showMessageDialog(this, INVALID_FIELDS, ERROR, JOptionPane.ERROR_MESSAGE);
}
}
}
}